<?php
/**
 * 角色类
 */
namespace app\admin\controller;
use app\admin\controller\Common;
use app\admin\model\Roles;
class Role extends Common{

	/**
	 * 展示角色列表页
	 */
	public function lst(){

		//分配模版标头信息变量
		$this->setPageTitle("角色列表","添加角色",url('addShow'));

		//获取角色信息
		$roleModel = new Roles();
		$data = $roleModel->alias('r')->field('r.rid,role_name,auth_name')->join('jd_role_auth ra',' r.rid = ra.rid','LEFT')->join('jd_auth a',' a.aid = ra.aid','LEFT')->select()->toArray();
		
		//处理数据
		$roles = getListMeg( $data, 'rid', 'auth_name' );
		
		//分配变量
		$this->assign('roles',$roles);

		//展示视图
		return $this->fetch();
	}

	/**
	 * 展示角色添加页
	 */
	public function addShow(){

		//分配模版标头信息变量
		$this->setPageTitle("添加角色","角色列表",url('lst'));

		//获取权限信息
		$authModel = new \app\admin\model\Auths();
		$auths = $authModel->select()->toArray();
		$auths = getTree($auths,'aid','parent_id',0);

		//分配变量
		$this->assign('auths',$auths);

		//展示视图
		return view('add');
	}

	/**
	 * 添加角色
	 */
	public function add(){


		//安全处理
		if(!request()->isPost()) {
			$this->error('你访问的页面不存在');
		}

		//收集数据
		$data = input('post.');

		//验证角色名是否填写
		if(empty($data['role_name'])) {

			$this->error('角色名必须填写！');

		}

		//处理数据
		$role = new Roles();
		$role->role_name = $data['role_name'];

		//判断角色名是否已经存在
		if( $role->getbyRoleName($data['role_name']) ) {
			$this->error('角色名已经存在，请换一个角色名！');
		}
		
		//添加角色
		if( false !== $role->allowField(true)->save() ) {

			

			//获取最后插入id
			$id = $role->getLastInsID();

			//获取最后插入的数据对象
			$rol = Roles::get($id);

			//处理数据
			$arr = array_map('intval', $data['pri_id']);

			//向第三张表角色权限表插入数据
			if( !$rol->auth()->attach($arr)) {

				$this->error('角色添加成功，但用户权限添加失败，可以去角色列表对当前角色进行更改操作！');

			}

			//获取最后执行的sql语句
			$sql = Roles::getLastSql();

			//添加管理员日志
			adminLog( session('id'), '添加了角色：'.$data['role_name'], $sql );

			$this->success('添加成功',url('lst'));

		}else{

			$this->error('添加失败');
		}
		
	}

	/**
	 * 展示角色修改页
	 */
	public function editShow(){

		//分配模版标头信息变量
		$this->setPageTitle("修改角色","角色列表",url('lst'));

		//获取权限信息
		$authModel = new \app\admin\model\Auths();
		$auths = $authModel->select()->toArray();
		$auths = getTree($auths,'aid','parent_id',0);

		//获取角色信息
		$id = input('id')+0;
		$data = db('role')->alias('r')->join('jd_role_auth ra','r.rid = ra.rid','LEFT')->select($id);
		
		//处理数据
		$role['rid'] = $data[0]['rid'];
		$role['role_name'] = $data[0]['role_name'];
		foreach ( $data as $v ) {

			$role['aid'][] = $v['aid'];

		}
		
		//分配变量
		$this->assign('auths',$auths);
		$this->assign('role',$role);

		//展示视图
		return view('edit');
	}

	/**
	 * 修改角色
	 */
	public function edit(){

		//安全处理
		if(!request()->isPost()) {
			$this->error('你访问的页面不存在');
		}

		//收集数据
		$data = input('post.');

		//验证角色名是否填写
		if(empty($data['role_name'])) {

			$this->error('角色名必须填写！');

		}

		//处理数据
		$role = new Roles();
		$role->role_name = $data['role_name'];
		$role->rid = $data['role_id']+0;
		
		//修改角色
		if( false !== $role->allowField(true)->isUpdate(true)->save() ) {

			//获取最后插入的数据对象
			$rol = Roles::get($data['role_id']);

			//向第三张表角色权限表插入数据
			$rol->auth()->detach();

			//处理数据
			if( !empty($data['pri_id']) ) {

				$arr = array_map('intval', $data['pri_id']);

				if( !$rol->auth()->attach($arr) ) {

					$this->error('角色更新成功，但用户权限更新失败');

				}
			}

			//获取最后执行的sql语句
			$sql = Roles::getLastSql();

			//添加管理员日志
			adminLog( session('id'), '更新了角色：'.$data['role_name'], $sql );

			$this->success('更新成功',url('lst'));

		}else{

			$this->error('更新失败');
		}
		
	}

	/**
	 * 异步删除用户
	 */
	public function del(){

		//安全处理
		if(!request()->isAjax()){

			$this->error('你访问的页面不存在！');

		}

		//获取id
		$id = input('id')+0;

		//检测角色下是否有用户
		if( db('admin_role')->where('rid = '.$id)->find() ){

			echo json_encode( ['status'=>0,'msg'=>'该角色下还存在用户，不能删除，请先删除角色小的用户！'] );
			die;
		}

		//删除用户
		$admin = Roles::get($id);
		if( $admin->destroy($id) ){

			//获取最后执行的sql语句
			$sql = Roles::getLastSql();

			//添加管理员日志
			adminLog( session('id'), '删除了角色：'.$admin->role_name, $sql );

			//删除关联表，角色权限表数据
			$admin->auth()->detach();

			echo json_encode( ['status'=>1,'msg'=>'删除成功！'] );

		}else{

			echo json_encode( ['status'=>0,'msg'=>'删除失败！'] );

		}
	}
}